﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace supervisor_de_cajas
{
    public partial class cliente : Form
    {
        public cliente()
        {
            InitializeComponent();
        }
        Conexion conn = new Conexion();
        Gestion g = new Gestion();
        private void cliente_Load(object sender, EventArgs e)
        {
            labelsesion.Text = g.recuperarNombreSesion(login.sesion) + " " + g.recuperarApellidoSesion(login.sesion);
            llenarComboboxEtario(cbgrupoet);
            llenarComboboxSexo(cbsexo);
            btNuevo.Enabled = false;
            cbFiltro.SelectedIndex = 0;
            //listar();
            timer1.Start();
            // TODO: esta línea de código carga datos en la tabla 'supervisordecajasDataSet1.tipo_de_rango_etario' Puede moverla o quitarla según sea necesario.
            this.tipo_de_rango_etarioTableAdapter.Fill(this.supervisordecajasDataSet1.tipo_de_rango_etario);
            // TODO: esta línea de código carga datos en la tabla 'supervisordecajasDataSet.cliente' Puede moverla o quitarla según sea necesario.
            this.clienteTableAdapter.Fill(this.supervisordecajasDataSet.cliente);
            // TODO: esta línea de código carga datos en la tabla 'supervisordecajasDataSet.tipo_sexo' Puede moverla o quitarla según sea necesario.
            this.tipo_sexoTableAdapter.Fill(this.supervisordecajasDataSet.tipo_sexo);
            btNuevo.Enabled = false;
            cbFiltro.SelectedIndex = 0;
            dgv1.DataSource = g.getClientes();
            dgv1.DataMember = "Clientes";
            
            
            cbgrupoet.SelectedIndex = 0;
            cbsexo.SelectedIndex = 0;
        }
        private void listar()
        {
            dgv1.DataSource = g.getClientes();
            dgv1.DataMember = "Clientes";
        }
        private void insertar()
        {
            string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Cliente_Insert", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 50).Value = txtapellido.Text;
                cmd.Parameters.Add("@rut", SqlDbType.VarChar, 50).Value = rutcompleto;
                cmd.Parameters.Add("@idtipocliente", SqlDbType.VarChar, 50).Value = 1;
                cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                cmd.Parameters.Add("@porcentaje_acumulacion",SqlDbType.VarChar,50).Value = txtacum.Text;
                cmd.Parameters.Add("@idtipo_sexo", SqlDbType.VarChar,50).Value = txtidsexo.Text;
                cmd.Parameters.Add("@idtipo_etario", SqlDbType.VarChar,50).Value = txtidetario.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Cliente registrado con exito.!","Exito",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos."+ex.Message);
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void modificar()
        {
            string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Cliente_Update", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@nombre", SqlDbType.VarChar, 50).Value = txtnombre.Text;
                cmd.Parameters.Add("@apellido", SqlDbType.VarChar, 50).Value = txtapellido.Text;
                cmd.Parameters.Add("@idtipo_sexo", SqlDbType.VarChar).Value = txtidsexo.Text;
                cmd.Parameters.Add("@idtipo_etario", SqlDbType.VarChar, 50).Value = txtidetario.Text;
                cmd.Parameters.Add("@idcliente", SqlDbType.VarChar, 50).Value = txtid.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Los datos han sido actualizados.!","Éxito",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos."+ex.Message,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void inicializarValores()
        {
            txtacum.Text = "0";
            txttipocliente.Text ="Normal";
            cbgrupoet.SelectedIndex = 0;
            cbsexo.SelectedIndex = 0;

        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            label5.Text = DateTime.Now.ToLongTimeString();
        }

        private void fillByToolStripButton_Click(object sender, EventArgs e)
        {
            try
            {
                this.tipo_sexoTableAdapter.FillBy(this.supervisordecajasDataSet.tipo_sexo);
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }

        }

        private void cbsexo_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtidsexo.Text = Convert.ToString(g.RecuperarIdSexo(cbsexo.Text));
        }

        private void cbgrupoet_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtidetario.Text = Convert.ToString(g.RecuperarIdEtario(cbgrupoet.Text));
        }

        private void btregistrar_Click(object sender, EventArgs e)
        {
            string rutC = txtrut.Text + txtdigito.Text;
            //int rut = int.Parse(rutC);
            if (btregistrar.Text.Equals("Registrar"))
            {
                if (txtnombre.Text == "" || txtrut.Text == "" || txtapellido.Text == "")
                {
                    MessageBox.Show("Debe completar todos los datos.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (txtidsexo.Text == "0" || txtidsexo.Text == "" || txtidetario.Text == "0" || txtidetario.Text == "")
                    {
                        MessageBox.Show("Faltan datos obligatorios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        if (g.ExisteCajero(rutC) == true)
                        {
                            MessageBox.Show("El rut ingresado ya existe en la base de datos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            g.Limpiar(groupBox1);
                            txtrut.Focus();
                        }
                        else
                        {
                            if (txtrut.Text.Length < 7) { MessageBox.Show("El rut ingresado es demasiado corto.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
                            else
                            {
                                insertar();
                                g.Limpiar(groupBox1);
                                inicializarValores();
                            }
                        }
                    }
                }
            }
            if (btregistrar.Text.Equals("Guardar"))
            {
                if (txtid.Text == "" )
                {
                    MessageBox.Show("Debe seleccionar una fila.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (txtidsexo.Text == "0" || txtidsexo.Text == "" || txtidetario.Text == "0" || txtidetario.Text == "")
                    {
                        MessageBox.Show("Faltan datos obligatorios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        if (txtrut.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[1].Value.ToString() &&
                               txtid.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[0].Value.ToString() &&
                               txtnombre.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[2].Value.ToString() &&
                               txtapellido.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[3].Value.ToString() &&
                               //txtacum.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[4].Value.ToString() &&
                               cbsexo.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[6].Value.ToString() &&
                               cbgrupoet.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[7].Value.ToString())
                              // txttipocliente.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[5].Value.ToString())
                        {
                            MessageBox.Show("No se han realizado cambios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            btregistrar.Text = "Registrar";
                            g.Limpiar(groupBox1);
                            txtdigito.Visible = true;
                            txtrut.ReadOnly = false;
                            txtrut.Focus();
                            btNuevo.Enabled = false;
                            txtid.Text = "";
                            cbgrupoet.Items.Clear();
                            cbsexo.Items.Clear();
                            cbgrupoet.Items.Add("Elija");
                            cbsexo.Items.Add("Elija");
                            llenarComboboxEtario(cbgrupoet);
                            llenarComboboxSexo(cbsexo);
                            cbsexo.SelectedIndex = 0;
                            cbgrupoet.SelectedIndex = 0;
                            txtacum.Text = "0";
                            txttipocliente.Text = "Normal";

                        }
                        else
                        {

                            modificar();
                            btregistrar.Text = "Registrar";
                            g.Limpiar(groupBox1);
                            txtdigito.Visible = true;
                            txtrut.ReadOnly = false;
                            txtrut.Focus();
                            btNuevo.Enabled = false;
                            txtid.Text = "";
                            cbgrupoet.Items.Clear();
                            cbsexo.Items.Clear();
                            cbgrupoet.Items.Add("Elija");
                            cbsexo.Items.Add("Elija");
                            llenarComboboxEtario(cbgrupoet);
                            llenarComboboxSexo(cbsexo);
                            cbsexo.SelectedIndex = 0;
                            cbgrupoet.SelectedIndex = 0;
                            txtacum.Text = "0";
                            txttipocliente.Text = "Normal";

                        }                    
                    }
                }
            }
            dgv1.DataSource = g.getClientes();
            dgv1.DataMember = "Clientes";
            listar();
        }

        private void dgv1_Click(object sender, EventArgs e)
        {
            btNuevo.Enabled = true;
            txtdigito.Visible = false;
            txtrut.ReadOnly = true;
            txtid.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[0].Value.ToString();
            txtrut.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[1].Value.ToString();
            txtnombre.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[2].Value.ToString();
            txtapellido.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[3].Value.ToString();
            txtacum.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[4].Value.ToString();
            cbgrupoet.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[7].Value.ToString();
            cbsexo.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[6].Value.ToString();
            /*if (estado.Equals("Activo"))
                 chkactivo.Checked = true;
             else
                 chkinactivo.Checked = true;*/

            btregistrar.Text = "Guardar";
        }
        public void llenarComboboxSexo(ComboBox combo)
        {
            DataSet ds = new Gestion().buscarCombomoxSexo(); ;
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables["Sexo"].Rows.Count; i++)
                {
                    combo.Items.Add(ds.Tables["Sexo"].Rows[i][0].ToString());
                }
            }
        }
        public void llenarComboboxEtario(ComboBox combo)
        {
            DataSet ds = new Gestion().buscarCombomoxEtario(); ;
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables["etario"].Rows.Count; i++)
                {
                    combo.Items.Add(ds.Tables["etario"].Rows[i][0].ToString());
                }
            }
        }

        private void btNuevo_Click(object sender, EventArgs e)
        {
            btNuevo.Enabled = false;
            txtdigito.Visible = true;
            txtrut.ReadOnly = false;
            txtrut.Focus();
            g.Limpiar(groupBox1);
            btregistrar.Text = "Registrar";
            txtrut.Focus();
            cbsexo.SelectedIndex = 0;
            cbgrupoet.SelectedIndex = 0;
            txtacum.Text = "0";
            txttipocliente.Text = "Normal";
            txtidetario.Text = "";
            txtidsexo.Text = "";
            txtid.Text = "";
        }

        private void bteliminar_Click(object sender, EventArgs e)
        {
            if (dgv1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgv1.RowCount; i++)
                {

                    if (dgv1.Rows[i].Selected == true)
                    {

                        
                            //Codigo y mas codigo
                            int codigo;
                            int.TryParse(dgv1[0, i].Value.ToString(), out codigo);
                            g.eliminarCliente(codigo);
                            txtid.Text = "";
                            n = n + 1;
                        
                        
                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                btregistrar.Text = "Registrar";
                btNuevo.Enabled = false;
                inicializarValores();
                txtrut.ReadOnly = false;
                txtdigito.Visible = true;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (dgv1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgv1.RowCount; i++)
                {

                    if (dgv1.Rows[i].Selected == true)
                    {

                       
                            //Codigo y mas codigo
                            int codigo;
                            int.TryParse(dgv1[0, i].Value.ToString(), out codigo);
                            g.ActivarCliente(codigo);
                            txtid.Text = "";
                            n = n + 1;
                       
                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                btregistrar.Text = "Registrar";
                btNuevo.Enabled = false;
                txtrut.ReadOnly = false;
                txtdigito.Visible = true;
                inicializarValores();
            }
        }

        private void cbFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbFiltro.Text == "Todos")
            {
                txtbusqueda.Enabled = false;
                listar();
            }
            else
            {
                txtbusqueda.Enabled = true;
                txtbusqueda.Text = "";
                if (cbFiltro.Text == "rut")
                {
                    txtbusqueda.MaxLength = 8;
                }
                if (cbFiltro.Text == "nombre")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbFiltro.Text == "apellido")
                {
                    txtbusqueda.MaxLength = 40;
                }
                if (cbFiltro.Text == "porcentaje_acumulacion")
                {
                    txtbusqueda.MaxLength = 20;
                }
                if (cbFiltro.Text == "idtipo_sexo")
                {
                    txtbusqueda.MaxLength = 15;
                }
                if (cbFiltro.Text == "idtipo_etario")
                {
                    txtbusqueda.MaxLength = 20;
                }
                if (cbFiltro.Text == "idtipocliente")
                {
                    txtbusqueda.MaxLength = 20;
                }
                if (cbFiltro.Text == "Activos")
                {
                    txtbusqueda.Enabled = false;
                    dgv1.DataSource = g.getClientesActivos();
                    dgv1.DataMember = "Clientes";
                }
                if (cbFiltro.Text == "Inactivos")
                {
                    txtbusqueda.Enabled = false;
                    dgv1.DataSource = g.getClientesInActivos();
                    dgv1.DataMember = "Clientes";
                }

            }
        }

        private void txtbusqueda_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }
            if (cbFiltro.Text == "rut")
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                    if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                    {
                        e.Handled = false;
                    }
                    else
                    {
                        //el resto de teclas pulsadas se desactivan 
                        e.Handled = true;
                    }
            }
            if (cbFiltro.Text == "nombre" || cbFiltro.Text == "apellido" || cbFiltro.Text == "tipo_sexo.descripcion" || cbFiltro.Text == "tipo_de_rango_etario.descripcion" || cbFiltro.Text == "tipo_cliente.descripcion")
            {
                if (Char.IsLetter(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
            else
            {
                if (cbFiltro.Text == "porcentaje_acumulacion")
                {
                    if (Char.IsDigit(e.KeyChar))
                    {
                        e.Handled = false;
                    }
                    else
                        if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                        {
                            e.Handled = false;
                        }
                        else
                        {
                            //el resto de teclas pulsadas se desactivan 
                            e.Handled = true;
                        }
                }
            }
        }
        

        private void txtbusqueda_TextChanged(object sender, EventArgs e)
        {
            if (cbFiltro.Text == "Todos")
            {
                listar();
            }
            else
            {
                dgv1.DataSource = g.verClienteFiltro(" WHERE " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%'OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%'");
                dgv1.DataMember = "CLIENTE";
            }
        }

        private void txtrut_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                {
                    e.Handled = false;
                }
                else
                {
                    //el resto de teclas pulsadas se desactivan 
                    e.Handled = true;
                }
        }

        private void txtrut_TextChanged(object sender, EventArgs e)
        {
            if(txtdigito.Visible==true){
                if (txtrut.Text == "")
                {
                    txtdigito.Text = "";
                }
                if (txtrut.TextLength == 7 || txtrut.TextLength == 8)
                {
                    int rut = Convert.ToInt32(txtrut.Text);
                    string digito = g.digitoVerificador(rut);
                    txtdigito.Text = digito;
                }
            }
            
        }

        private void txtnombre_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtapellido_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsWhiteSpace(e.KeyChar) && e.KeyChar != '\b') { e.Handled = true; }
        }

        private void txtnombre_Validating(object sender, CancelEventArgs e)
        {
            txtnombre.Text = Regex.Replace(txtnombre.Text.Trim(), @"\s+", " ");
        }

        private void txtrut_Validating(object sender, CancelEventArgs e)
        {
            txtrut.Text = Regex.Replace(txtrut.Text.Trim(), @"\s+", " ");
        }

        private void txtapellido_Validating(object sender, CancelEventArgs e)
        {
            txtapellido.Text = Regex.Replace(txtapellido.Text.Trim(), @"\s+", " ");
        }

        private void txtnombre_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtdigito_TextChanged(object sender, EventArgs e)
        {

        }

        private void txtapellido_TextChanged(object sender, EventArgs e)
        {

        }

        private void txttipocliente_TextChanged(object sender, EventArgs e)
        {

        }
    }
}
